/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package rpg.recurso;

import java.awt.Color;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.util.ArrayList;
import javax.sound.sampled.UnsupportedAudioFileException;
import javax.swing.BorderFactory;
import javax.swing.ImageIcon;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.border.TitledBorder;
import rpg.personagem.Mensageiro;

/**
 * @author Douglas Montanha Giordano
 * @since 25/02/13
 * @version 0.5
 */
public class Inventario {

    private JButton espaco1;
    private JButton espaco2;
    private JButton espaco3;
    private JButton espaco4;
    private JButton espaco5;
    private JButton espaco6;
    private JButton espaco7;
    private JButton espaco8;
    private JButton espaco9;
    private JButton espaco10;
    private JButton espaco11;
    private JButton espaco12;
    //Array apenas para repassar os botões para o tratamento em alguns metodos
    private ArrayList<JButton> inventario;
    private Mensageiro mensageiro;

    /**
     * Método construtor da classe
     *
     * @param men
     */
    public Inventario(Mensageiro men) {
        mensageiro = men;
    }

    /**
     * Repassa toda a estrutura de botões para dentro de um Jpanel que e
     * repassado por parametro, neste jpanel e criado toda estrutura do
     * inventario, e com eventos ja vinculados a cada botão
     *
     * @param janela
     */
    public void criaEstrutura(JPanel janela) {
        janela.setLayout(new GridLayout(4, 4));
        inventario = new ArrayList<JButton>();

        inventario.add(espaco1 = new JButton());
        inventario.add(espaco2 = new JButton());
        inventario.add(espaco3 = new JButton());
        inventario.add(espaco4 = new JButton());
        inventario.add(espaco5 = new JButton());
        inventario.add(espaco6 = new JButton());
        inventario.add(espaco7 = new JButton());
        inventario.add(espaco8 = new JButton());
        inventario.add(espaco9 = new JButton());
        inventario.add(espaco10 = new JButton());
        inventario.add(espaco11 = new JButton());
        inventario.add(espaco12 = new JButton());

        //adiciona eventos
        espaco1.addActionListener(new eventoEspaco1());
        espaco2.addActionListener(new eventoEspaco2());
        espaco3.addActionListener(new eventoEspaco3());
        espaco4.addActionListener(new eventoEspaco4());
        espaco5.addActionListener(new eventoEspaco5());
        espaco6.addActionListener(new eventoEspaco6());
        espaco7.addActionListener(new eventoEspaco7());
        espaco8.addActionListener(new eventoEspaco8());
        espaco9.addActionListener(new eventoEspaco9());
        espaco10.addActionListener(new eventoEspaco10());
        espaco11.addActionListener(new eventoEspaco11());
        espaco12.addActionListener(new eventoEspaco12());

        //repassa botões para o inventario
        adicionaEspacosInventario(janela);
        //Adiciona borda com titulo no Jpanel
        janela.setBorder(BorderFactory.createTitledBorder(null, "Inventario", TitledBorder.CENTER, TitledBorder.DEFAULT_POSITION));
        janela.setSize(100, 200);
        janela.setVisible(true);
    }

    /**
     * Adiciona os botoes ao Jpanel repassado como argumento
     *
     * @param janela
     */
    private void adicionaEspacosInventario(JPanel janela) {
        for (int i = 0; i < inventario.size(); i++) {
            janela.add(inventario.get(i));
        }

    }

    /**
     * Limpa a imagem de cada botão, deixando sem nenhuma visualização
     * possibilitando a atualização do mesmo após
     */
    private void limpaIconesInventario() {
        for (int i = 0; i < inventario.size(); i++) {
            inventario.get(i).setIcon(null);
        }
    }

    /**
     * Atualiza a interface de inventario, verifica cada item que o personagem
     * tem atualmente, e a cada botao e repassado um icone
     */
    public void atualizaInventario() {
        limpaIconesInventario();
        for (int i = 0; i < mensageiro.getRecursos().size(); i++) {
            if (mensageiro.getRecursos().get(i) != null) {
                //adiciona nome e quantidade do item ao tool tip
                inventario.get(i).setToolTipText("<html><b>Nome: </b>" + mensageiro.getRecursos().get(i).getNome() + "<BR> "
                        + "<b>Quantidade: </b>" + mensageiro.getRecursos().get(i).getQuantidade() + "<html>");
                //faz testes para alocar imagem ao espaço referente do recurso no inventario do personagem
                if (mensageiro.getRecursos().get(i) instanceof Cantil) {
                    inventario.get(i).setIcon(new ImageIcon(getClass().getResource("/img/iconJarro.png")));
                } else {
                    if (mensageiro.getRecursos().get(i) instanceof Armamento) {
                        Armamento temp = (Armamento) mensageiro.getRecursos().get(i);
                        inventario.get(i).setToolTipText(inventario.get(i).getToolTipText()
                                + "<html><BR><b>Complemento: </b>" + temp.getComplemento() + "<html>");
                        if (temp.getTipo() == TipoArmamento.Arma) {
                            inventario.get(i).setIcon(new ImageIcon(getClass().getResource("/img/iconSword.png")));
                        } else {
                            inventario.get(i).setIcon(new ImageIcon(getClass().getResource("/img/iconArmadura.png")));
                        }
                    } else {
                        if (mensageiro.getRecursos().get(i) instanceof Mapa) {
                            inventario.get(i).setIcon(new ImageIcon(getClass().getResource("/img/iconMapa.png")));
                        } else {
                            if (mensageiro.getRecursos().get(i) instanceof Alimento) {
                                inventario.get(i).setIcon(new ImageIcon(getClass().getResource("/img/iconAlimento.png")));
                            }

                        }
                    }
                }
            }
        }
    }

    /**
     * Modifica a cor de todos os botões do inventario
     *
     * @param cor
     */
    private void modificaCorBrackgroud(Color cor) {
        for (int i = 0; i < inventario.size(); i++) {
            inventario.get(i).setBackground(cor);
        }
    }

    /**
     * Classe apenas para testes
     *
     * @param args
     */
    public static void main(String args[]) {

        Mensageiro men = new Mensageiro("Douglas", 20, 10, 4, 1);
        Inventario c = new Inventario(men);
        JPanel jpanel = new JPanel();
        JFrame jf = new JFrame();

        //cria botões
        c.criaEstrutura(jpanel);
        //troca a cor dos botões
        c.modificaCorBrackgroud(Color.LIGHT_GRAY);
        /*
         * Cria Recursos
         */
        Cantil cantil = new Cantil("cantil", 1, 10, "Carrega agua");
        Armamento espada = new Armamento("Espada", 1, 50, 2, TipoArmamento.Arma);
        Armamento machado = new Armamento("Machado", 1, 100, 2, TipoArmamento.Arma);
        Armamento armadura = new Armamento("Armadura", 1, 2, 2, TipoArmamento.Armadura);
        Mapa mapa = new Mapa("Mapa", 1, "Mostrar Lugares");
        Alimento maca = new Alimento("Maça", 10, 10, Estado.Otimo);
        /**
         * Adiciona recursos ao personagem
         */
        men.pegar(cantil);
        men.pegar(espada);
        men.pegar(armadura);
        men.pegar(mapa);
        men.pegar(maca);
        men.pegar(machado);

        c.atualizaInventario();

        jf.getContentPane().add(jpanel);
        jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
        jf.setVisible(true);
        jf.setSize(100, 200);
        jf.setResizable(true);

    }

    /**
     * Utiliza o item da posição 0 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco1 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(0));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 1 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco2 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(1));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 2 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco3 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(2));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 3 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco4 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(3));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 4 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco5 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(4));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 5 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco6 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(5));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 6 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco7 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(6));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 7 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco8 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(7));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 8 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco9 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(8));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 9 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco10 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(9));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 10 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco11 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(10));
            atualizaInventario();
        }
    }

    /**
     * Utiliza o item da posição 11 do array de recursos do personagem por meio
     * de um evento
     */
    public class eventoEspaco12 implements ActionListener {

        @Override
        public void actionPerformed(ActionEvent ae) {
            mensageiro.usarItem(mensageiro.getRecursos(11));
            atualizaInventario();
        }
    }
}
